package JXY03;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 将emp.dat文件中所有员工解析出来，并创建为若干Emp实例存入一个
 * 集合，然后输出该集合中每个员工信息。
 * 该文件800字节，每80个字节为一个员工的信息。
 * 其中:
 * 	 name为字符串，长度为32个字节，编码为:UTF-8
 *   age为int,长度为4个字节
 * 	 gender为字符串，长度为10个字节，编码为:UTF-8
 * 	 salary为int,长度为4个字节
 * 	 hiredate为字符串，格式"yyyy-MM-dd"，长度为30个字节，编码为:UTF-8
 * 格式可参考当前包中emp.jpg图
 * 提示:
 * 使用RandomAccessFile读取字符串时，例如name,可以先读取32个字节，再按照UTF-8
 * 转换为字符串，读取age时可以直接使用readInt方法。依次类推。
 * @author Bonnie
 *
 */
public class Test01 {
	public static void main(String[] args) throws Exception{
		//使用类加载器加载当前包中的emp.dat文件
		File file = new File(Test01.class.getClassLoader().getResource("emp.dat").toURI());
		RandomAccessFile raf = new RandomAccessFile(file,"r");			//只读不写
		List<Emp> list = new ArrayList<Emp>();
		//转换hiredate格式
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		for (int i = 0; i < 10; i++){
			String name = readString(raf,32).trim();
			int age = raf.readInt();
			String gender = readString(raf,10).trim();
			int salary = raf.readInt();
			String hiredate_s = readString(raf,30).trim();

			Date hiredate = format.parse(hiredate_s);
			Emp emp = new Emp(name,age,gender,salary,hiredate);
			list.add(emp);
		}
		System.out.println("解析完成");
		for (Emp e: list){
			System.out.println(e);
		}
	}

	private static String readString(RandomAccessFile raf, int len) throws IOException {
		byte[] data = new byte[len];
		raf.read(data);
		return new String(data,"UTF-8");
	}

}
